#!/bin/bash
limit_file=/etc/security/limits.conf

# 查看资源限制
function show_limits() {
    echo "当前用户的资源限制："
    ulimit -a
}

# 修改资源限制
function modify_limits() {
    # 修改特定用户的资源限制
    echo "修改用户 $username 的资源限制为："
    sudo su -c "ulimit -n $file_limit" -s /bin/bash $username

    # 永久生效
    if cat $limit_file|grep -q "$username hard nofile" ;then
	sed -i "s/^$username hard nofile.*/$username hard nofile $file_limit/" $limit_file
    else
	echo "$username hard nofile $file_limit" >> $limit_file
    fi
   

    if cat $limit_file|grep -q "$username soft nofile" ;then
	sed -i "s/^$username soft nofile.*/$username soft nofile $file_limit/" $limit_file
    else
	echo "$username soft nofile $file_limit" >> $limit_file
    fi
    cat $limit_file
}


# 修改资源限制
function modify_systemd_limits() {
    # 修改 systemd 服务的资源限制
    echo "修改 systemd 服务 $service_name 的资源限制为："
    sudo systemctl edit $service_name
    echo -e "[Service]\nLimitNOFILE=$file_limit" | sudo tee -a /etc/systemd/system/$service_name.conf
    sudo systemctl daemon-reload
    sudo systemctl restart $service_name
}


# 主菜单
function main_menu() {
    clear
    echo "资源限制优化脚本"
    echo "1. 查看当前资源限制"
    echo "2. 修改用户资源限制"
    echo "3. 修改 systemd 服务资源限制"
    echo "0. 退出"
    read -p "请输入选项: " option

    case $option in
        1)
            show_limits
            ;;
        2)
            read -p "请输入用户名: " username
            read -p "请输入新的文件描述符限制数: " file_limit
            modify_limits
            ;;
        3)
            read -p "请输入 systemd 服务名称: " 
            read -p "请输入新的文件描述符限制数: " file_limit
            modify_systemd_limits
            ;;
        0)
            echo "退出脚本"
            exit 0
            ;;
        *)
            echo "无效选项"
            ;;
    esac

    read -p "按回车键返回主菜单"
    main_menu
}

# 启动主菜单
main_menu

